package com.arsenavid.maven.web.servlet;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import es.altran.utilities.AppUtilities;

public class BuscarVuelosForm {
	
	private String iataAeroOrigen;
	private String iataAeroDestino;
	private Date fechaPartida;
	private int objetoInicial;
	private int numObjetos;
	private int vueloseleccionado;
	private String nombre;
	private String nifcif;
	
	

	private List<String> mensajesError;
	
	public BuscarVuelosForm() {}
	
	public BuscarVuelosForm(HttpServletRequest request) {
		mensajesError = new ArrayList<String>();
		copiarParametros(request);
		validarAtributos(request);
	}

	private void copiarParametros(HttpServletRequest request) {
		
		vueloseleccionado = (request.getParameter("vueloseleccionado") == null) ? 0 : Integer.parseInt(request.getParameter("vueloseleccionado"));		
		setIataAeroOrigen(request.getParameter("iataOrigen"));
		setIataAeroDestino(request.getParameter("iataDestino"));
		//Controlamos si es null poniendo a 0 el valor
		objetoInicial = request.getParameter("ObjetoInicial") == null ? 0 :
				Integer.parseInt(request.getParameter("objetoInicial"));
		try {
			SimpleDateFormat Sfmt = new SimpleDateFormat("yyyy-MM-dd");
			Date dt = Sfmt.parse(request.getParameter("fechaPartida"));
			Sfmt.setLenient(false);
			setFechaPartida(dt);
		} catch (ParseException exc) {}
		
		setNifcif(request.getParameter("nifcif"));
		setNombre(request.getParameter("nombre"));
	}

	private void validarAtributos(HttpServletRequest request) {
		//Validamos los datos para los formularios de busqueda de vuelos
		if (request.getParameter("buscar") != null ||
			request.getParameter("siguiente") != null ) {
			
			if (request.getParameter("iataOrigen") == null)
				mensajesError.add("Es necesario el aeropuerto Origen");
			if (request.getParameter("iataDestino") == null)
				mensajesError.add("Es necesario el aeropuerto Destino");
			if (request.getParameter("fechaPartida") == null) {
				mensajesError.add("La fecha es inválida");				
			} else {
				if (getFechaPartida().before(new Date())) {
					mensajesError.add("La fecha de partida es del pasado");
				}
			}
		//Validamos los datos para comprar un billete	
		} else if (request.getParameter("comprar") != null) {
			if (vueloseleccionado == 0)
				mensajesError.add("Debes seleccionar un vuelo para comprar");
		//Validamos los datos para 
		} else if (request.getParameter("validar") != null) {
			if (!AppUtilities.isNIF(nifcif)) { 
				if (!AppUtilities.isCIF(nifcif))
					mensajesError.add("El formato del NIF o CIF es incorrecto");
			}
			if (request.getParameter("nombre") == null || request.getParameter("nombre").isEmpty())
				mensajesError.add("Debes introducir un nombre");
			if (vueloseleccionado == 0)
				mensajesError.add("Debes seleccionar un vuelo");
		}
	}
	
	public String getIataAeroOrigen() {
		return iataAeroOrigen;
	}

	public void setIataAeroOrigen(String iataAeroOrigen) {
		this.iataAeroOrigen = iataAeroOrigen;
	}

	public String getIataAeroDestino() {
		return iataAeroDestino;
	}

	public void setIataAeroDestino(String iataAeroDestino) {
		this.iataAeroDestino = iataAeroDestino;
	}

	public Date getFechaPartida() {
		return fechaPartida;
	}

	public void setFechaPartida(Date fechaPartida) {
		this.fechaPartida = fechaPartida;
	}

	public List<String> getMensajesError() {
		return mensajesError;
	}

	public void setMensajesError(List<String> mensajesError) {
		this.mensajesError = mensajesError;
	}

	public int getNumObjetos() {
		return numObjetos;
	}

	public void setNumObjetos(int numObjetos) {
		this.numObjetos = numObjetos;
	}

	public int getObjetoInicial() {
		return objetoInicial;
	}

	public void setObjetoInicial(int objetoInicial) {
		this.objetoInicial = objetoInicial;
	}

	public int getVueloseleccionado() {
		return vueloseleccionado;
	}

	public void setVueloseleccionado(int vueloseleccionado) {
		this.vueloseleccionado = vueloseleccionado;
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNifcif() {
		return nifcif;
	}

	public void setNifcif(String cifnif) {
		this.nifcif = cifnif;
	}
	
}
